package com.animerank.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.animerank.entity.Favorite;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 收藏Mapper接口
 */
@Mapper
public interface FavoriteMapper extends BaseMapper<Favorite> {

    /**
     * 检查用户是否已收藏动漫
     * @param userId 用户ID
     * @param animeId 动漫ID
     * @return 收藏记录数量
     */
    Integer checkUserFavorite(@Param("userId") Long userId, @Param("animeId") Long animeId);

    /**
     * 获取用户收藏的动漫ID列表（分页）
     * @param userId 用户ID
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 动漫ID列表
     */
    List<Long> getUserFavoriteAnimeIds(Long userId, Integer offset, Integer limit);
    
    /**
     * 统计用户收藏总数
     * @param userId 用户ID
     * @return 收藏总数
     */
    int countUserFavorites(Long userId);

    /**
     * 统计动漫的收藏数量
     * @param animeId 动漫ID
     * @return 收藏数量
     */
    Integer countAnimeFavorites(@Param("animeId") Long animeId);

    /**
     * 批量检查用户是否已收藏动漫
     * @param userId 用户ID
     * @param animeIds 动漫ID列表
     * @return 已收藏的动漫ID列表
     */
    List<Long> batchCheckUserFavorites(@Param("userId") Long userId, @Param("animeIds") List<Long> animeIds);

    /**
     * 根据用户ID和动漫ID删除收藏记录
     * @param userId 用户ID
     * @param animeId 动漫ID
     * @return 删除的记录数
     */
    @Delete("DELETE FROM favorite WHERE user_id = #{userId} AND anime_id = #{animeId}")
    Integer deleteByUserIdAndAnimeId(@Param("userId") Long userId, @Param("animeId") Long animeId);

}